package server.models.tireur;

import java.io.Serializable;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Observable;

import server.models.PosteDeTir;
import server.models.participant.Participant;

public class Tireur extends Observable implements ITireur, Serializable {
	
	private Participant participant;
	private ArrayList<PosteDeTir> listePostesDeTirAVister;
	
	public Tireur(Participant participant, ArrayList<PosteDeTir> listePosteDeTirAVister) {
		this.participant = participant;
		this.listePostesDeTirAVister = new ArrayList<PosteDeTir>();
		for (PosteDeTir posteDeTir : listePosteDeTirAVister) {
			this.listePostesDeTirAVister.add(posteDeTir);
		}
	}

	public void setSurnom(String surnom) {
		System.out.println("Surnom a changé pour : " + this.getSurnom());
		this.participant.setSurnom(surnom);
		this.setChanged();
		this.notifyObservers();
	}
	
	public String getSurnom() {
		return this.participant.getSurnom();
	}
	
	public ArrayList<PosteDeTir> getListePostesDeTirAVisiter() {
		return listePostesDeTirAVister;
	}
	
	@Override
	public Participant getParticipant() {
		return this.participant;
	}
	
	public void removePosteDeTirAVisiter(PosteDeTir poste) {
		this.listePostesDeTirAVister.remove(poste);
	}

	
	/**
	 * Méthode qui permet de savoir si le tireur a déjà visité un poste de tir (station)
	 * @param posteDeTir	Le poste de tir
	 * @return	true si le poste de tir a déjà été visité, false sinon.
	 */
	public boolean estDejaVisiter(PosteDeTir posteDeTir) {
		return !listePostesDeTirAVister.contains(posteDeTir);
	}
	
	/**
	 * Méthode supprime un poste de tir de la liste des postes de tir à visiter
	 * @param posteDeTir	Poste de tir que l'on doit supprimer
	 */
	public void visiterPosteDeTir(PosteDeTir posteDeTir) {
		this.listePostesDeTirAVister.remove(posteDeTir);
		this.setChanged();
		this.notifyObservers();
	}
	
	//@Override
//	public void addObserver(IRemoteObserver observer) throws RemoteException {
//		WrappedObserver wrappedObserver = new WrappedObserver(observer);
//		this.addObserver(wrappedObserver);
//
//        System.out.println("Added observer:" + wrappedObserver);
//	}
}
